博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Django 模板系统
阅读量:5162 次
发布时间:2019-06-13

本文共 4460 字,大约阅读时间需要 14 分钟。

常用语法

只需要记住两种特使符号:

{

{ }} 和 {% %}

与变量相关的用 {

{ }},与逻辑相关的用 {% %}。

1、变量

{

{变量名}}

变量名由字母、数字和下划线组成。

点(.) 在模板语言中有着特殊的含义:用来获取对象的相应属性值。

几个例子:

View 中代码:

def template_test(request):    l = [11, 22, 33]    d = {
"name": "alex"} class Person(object): def __init__(self, name, age): self.name = name self.age = age def dream(self): return "{} is dream .......".format(self.name) Alex = Person(name="Alex", age=24) Egon = Person (name="egon", age=55) xm = Person(name="xiaoming", age=16) person_list = [Alex, Egon, xm] return render(request, "template_test.html", {
"l": l, "d": d, "person_list": person_list})

在模板中支持的写法:

{
# 取l 中的第一个参数 #}{
{ l.0 }}{
# 取字典key 的值 #}{
{ d.name }}{
# 取对象的 name 属性 #}{
{person_list.0.name}}{
# .操作只能调用不带参数的方法 #}{
{ person_list.0.dream }}

2、Filters

语法: {

{ value|filter_name:参数}}

default

{
{ value:default:"nothing" }}{
# 意思是如果 value 没有传值的话就显示默认值:nothing #}

length

{

{ value|length }}     注意:在'|' 左右两边没有空格

返回的是value的长度, 如 value = ['a', 'b', 'c', 'd'] 的话,就显示是4。

filesizeformat

将值格式化为一个“人类可读的”文件尺寸(例如‘13kB’,‘4.1MB’,‘102 bytes’,等)。例如

{
{ value|filesizeformat }}{
# 如果 value 的值是 123456789,输出将会是117.7MB #}

slice  切片(与字符串切片一样,顾头不顾尾)

{
{ value|slice:"2:-1" }}

date 格式化

{
{ value|date:"Y-m-d H:i:s" }}将日期以 年-月-日 时:分:秒 的形式显示出来

safe

django的模板中会对HTML 标签和 js 等语法标签进行自动转义,原因显而易见,这样是为了安全。但是有的时候我们可能不希望这些HTML 元素被转义,比如我们做一个内容管理系统,后台添加的文章是经过修饰的,这些修饰可能是通过一个类似于FCKeditor 编辑加注了HTML 修饰符的文本,如果自动转义的话显示的就是保护HTML 标签的源文件。为了在Django中关闭HTML的自动转义有两种方式,如果是一个单独的变量我们可以通过过滤器“|safe” 的方式告诉Django这段代码是安全的不用转义。

例如:

value = "<a href='#'>点我</a >"

{
{ value|safe }}

3、truncatechars

如果字符串字符多于指定的字符数量,那么就会被截断。截断的字符串将以可翻译的省略号序列(“...”)结尾。

参数:截断的字符数

{
{ value|truncatechars:9 }}

4、自定义 filter

自定义 filter 代码文件摆放位置:

app01/    __init__.py    models.py    templaterags/          # 在qpp01 下面新建一个 package         __init__.py        app01_filters.py      # 建一个存放自定义 filter 的文件    views.py

编写自定义filter

from django import templateregister = template.Library()@register.filter(name="cut")def cut(value, arg):    return value.replace(arg, "")@register.filter(name="addSB")def add_sb(value):    return "{} SB".format(value)

使用自定义 filter

{
# 先导入我们自定义filter 那个文件 #}{% load app01_filters %}{
# 使用我们自定义的filter #}{
{ somevariable|cut:"0"}}{
{ d.name|addSB }}

5、Tags

for

    {
    % for user in user_list %}
  • {
    { user.name }}
  • {
    % endfor %}

for循环还可以有一些参数:

Variable Description
forloop.counter 当前循环的索引值(从1 开始)
forloop.counter0 当前循环的索引值(从0开始)
forloop.revcounter 当前循环的倒序索引值(从1开始)
forloop.revcounter0 当前循环的倒序索引值(从0开始)
forloop.first 当前循环是不是第一次循环(布尔值)
forloop.last 当前循环是不是最后一次循环(布尔值)
forloop.parentloop 本层循环的外层循环

for...empty

    {
    % for user in user_list %}
  • {
    { user.name }}
  • {
    % empty %}
  • 空空如也
  • {
    % endfor %}

if, elif 和 else

{% if user_list %}    用户人数:{
{ user_list|length }}{
% elif black_list %} 黑名单数:{
{ black_list|length}}{
% else %} 没有用户{
% endif %}

当然也可以只有 if 和 else

{% if user_list|length > 5 %}    七座豪华SUV{
% else %} 黄包车{
% endif %}

if 语句支持 and、or、==、>、<、>=、<=、!=、in、not in、is、is not 判断。

with

定义一个中间变量

{% with total = business.employees.count %}    {
{ total }} employee {
{ total|pluralize }}{
% endwith %}

6、csrf_token

这个标签是用于跨站请求伪造保护。

在页面的 form 表单里面写上 {% csrf_token %}

7、注释

{
# .... #}

 

母版

     
Title {
% block page-css %} {
% endblock %}

这是母版的标题

{
% block page-main %}{
% endblock %}

这是母版的底部

{
% block page-js %}{
% endblock %}

注意:我们通常会在母版中定义页面专用的CSS 和 JS 块方便子页面替换。

继承母版

在子页面中的页面最上方使用下面的语句来继承母版

{% extends '母版的.html'%}

块(block)

通过在母版中使用 {% block xxx %}来定义"块"。

在子页面中通过定义母版中的 block 名来对应替换母版中相应的内容。

{% block page-main %}    

世情薄

人情恶

雨送黄昏花易落

{
% endblock %}

组件

可以将常用的页面内容如导航条,页尾信息等组件保存在单独的文件中,然后在需要的地方按如下语法导入即可。

{% include 'navbar.html' %}{
# 其中的 navbar.html 是组件所在的单独的 html 文件名#}

静态文件相关

{% load static %}hi!

引用JS文件时使用:

{% load static %}

某个文件多处被用到可以存为一个变量

{% load static %}{
% static "images/hi.jpg" as myphoto %}

1、使用 get_static_prefix

{% load static %}{
% get_static_prefix as STATIC_PREFIX %}hi!Hello!

2、自定义 simpletag

和自定义 filter 类似,只不过接收更灵活的参数。

定义注册 simple tag

@register.simple_tag(name="plus")def plus(a, b, c):    return "{} + {} + {}".format(a, b, c)

使用自定义 simple tag

{% load app01_demo %}{
# simple tag #}{% plus "1" "2" "abc" %}

 

转载于:https://www.cnblogs.com/hzhcdhm/p/8324964.html

你可能感兴趣的文章
异步执行js脚本——防止阻塞
查看>>
利用Excel导出sql语句
查看>>
配置懒人框架——Android annotation
查看>>
伪分布模式安装hadoop
查看>>
oracle 051学习笔记
查看>>
Leanote 二进制版详细安装教程 Windows
查看>>
用 ROS 做内网DNS服务器
查看>>
算法 - 求和为n的连续正整数序列(C++)
查看>>
这些哭笑不得的情景,每一个程序猿都可能面对
查看>>
APUE学习笔记——10.15 sigsetjmp和siglongjmp
查看>>
Codeforces 455B A Lot of Games(字典树+博弈)
查看>>
经验19--C#大事
查看>>
基于Visual Studio .NET2015的单元测试 OpenCover
查看>>
浙江大学PAT上机题解析之2-06. 数列求和
查看>>
Errors
查看>>
(生活)没有好天气
查看>>
【例9.8】合唱队形
查看>>
jquery cookie的用法(转)
查看>>
avg
查看>>
【京东-深圳】文本文件的频繁插入
查看>>